var isDebug = false;
(function(w) {
    function plusReady() {
        isDebug && console.log("plusReady");
    };
    if (w.plus) {
        plusReady();
    } else {
        document.addEventListener("plusready", plusReady, false);
    };
    var packName = null;
    var dtask = null;
    var android = {
        /**
         * 安装包是否已安装检测
         * @param  {String} pg 包名
         * @return {Number} int 1 已安装，0 未安装
         */
        CheckInstall: function(pg) {
            isDebug && console.log("CheckInstall" + pg);
            this.packName = pg;
            var b = plus.runtime.isApplicationExist({
                pname: pg
            }) ? 1 : 0;
            isDebug && console.log("CheckInstall_Return  是否已安装 " + this.packName + b);
            CheckInstall_Return(b)
        },
        /**
         * 打开指定包名的APP
         * @param  {String} pg 包名
         * @return {void}
         */
        OpenApp: function(pg) {
            console.log('OpenAPP' + pg);
            if (plus.os.name == "Android") {
                plus.runtime.launchApplication({
                    pname: pg
                }, function(e) {
                    alert("Open system default browser failed: " + e.message);
                });
            }
        },
        /**
         * 跳转指定链接或IOS下载
         * @param  {String} url 跳转地址
         * @return {void}
         */
        Browser: function(url) {
            plus.runtime.openURL(url);
            isDebug && console.log(url)
        },
        /**
         * 卸载手机已安装的APP（可不实现此方法）
         * @param  {String} pg 包名
         * @return {void}
         */
        UnInstallApp: function(pg) {
            isDebug && console.log("卸载已安装APP, 请在此处完成..." + pg)
        },
        /**
         * 更新正在显示的游戏APP（可不实现此方法）
         * @param  {String} url 下载地址
         * @return {void}
         */
        CurrentPagerApp: function(url) {
            isDebug && console.log("更新正在显示的游戏APP, 请在此处完成..." + url)
        },
        /**
         * 安装包下载
         * @param  {String} down_url  下载地址
         * @return {void}
         */
        InstallApp: function(down_url) {
            isDebug && console.log('InstallAPP' + this.packName + " " + down_url);
            var index = down_url.lastIndexOf('/') > down_url.lastIndexOf('?') ? down_url.lastIndexOf('/') : down_url.lastIndexOf('?');
            var apk_name = "_downloads/" + down_url.substring(index + 1, down_url.length);
            if (apk_name.indexOf(".apk") == -1) {
                apk_name = apk_name + '.apk';
            }
            isDebug && console.log("下载文件 " + apk_name);
            if (dtask != null && dtask.url === down_url) {
                isDebug && console.log("任务正在下载中！")
                return;
            }
            var options = {
                method: "GET",
                filename: apk_name
            };
            isDebug && console.log("开始创建下载任务 ");
            var precent = 0; // 下载文件进度百分比
            var pkName = this.packName;
            dtask = plus.downloader.createDownload(down_url, options, null);
            dtask.addEventListener("statechanged", function(task, status) {
                if (!dtask) {
                    return;
                }
                switch (task.state) {
                    case 1: // 开始
                        isDebug && console.log("开始下载 ...");
                        isDebug && console.log("开始下载 ..." + pkName + "->" + precent);
                        precent = 0;
                        break;
                    case 2: // 已连接到服务器
                        isDebug && console.log("链接到服务器... ");
                        isDebug && console.log("链接到服务器 ..." + pkName + "->" + precent);
                        precent = 0;
                        break;
                    case 3: // 已接收到数据
                        var cur_precent = parseInt(100 * task.downloadedSize / task.totalSize) // Math.round(task.downloadedSize * 100 / task.totalSize)
                        if (precent != cur_precent) {
                            precent = cur_precent;
                            isDebug && console.log("正在下载…… packageName->" + pkName + "  progress->" + precent + "%");
                            DownloadProgress_Return(precent, pkName);
                        }
                        break;
                    case 4: // 下载完成
                        var filepath = task.filename;
                        isDebug && console.log("下载完成 " + filepath);
                        DownloadProgress_Return(100, pkName);
                        var install_options = {
                            force: false
                        };
                        plus.runtime.install(filepath, install_options, function(widgetInfo) {
                            isDebug && console.log("安装成功");
                            dtask = null;
                            isDebug && console.log(dtask == null);
                        }, function(e) {
                            isDebug && console.log("安装失败" + e.message);
                            dtask = null;
                            isDebug && console.log(dtask == null);
                        });
                        break;
                }
            });
            dtask.start();
            isDebug && console.log("下载任务创建成功 ");
        }
    };
    w.android = android;
})(window);